'use strict';

module.exports = appInfo => {

  const config = exports = {};

  // add your config here
  config.middleware = [
    'robot','gzip','errorHandler','notfoundHandler'
  ];

  config.page_limit_count = 10;

  // use for cookie sign key, should change to your own and keep security
  // 由于我们在 Cookie 中需要用到加解密和验签，所以需要配置一个秘钥供加密使用
  config.keys = appInfo.name + '_1523429621282_4683';

  //指定
  config.cluster = {
    listen: {
      port: 8080,
      hostname: '127.0.0.1',
      // path: '/var/run/egg.sock',
    }
  }

  config.view = {
    defaultViewEngine:'ejs',
    mapping: {
      '.ejs': 'ejs',
    },
  };

  config.onerror = {

    // 线上页面发生异常时，重定向到这个页面上
    errorPageUrl: '/50x.html',

  }

  config.notfound = {
    pageUrl: '/404.html',
  }

  config.session = {
    key: 'EGG_SESS',
    maxAge: 24 * 3600 * 1000, // 1 天
    httpOnly: true,
    encrypt: true,
  };

  //error中间件只对此路径生效
  config.errorHandler = {
    match: '/api',
  }

  //
  config.gzip = {
    threshold: 1024, // 小于 1k 的响应体不压缩
  };

  // config.bodyParser = {
  //   jsonLimit: '10mb',
  //   enable:false
  // };

  //临时关闭csrf，方便本地post form提交
  config.security = {
    csrf: false
  };

  //接口jsonp
  config.jsonp = {
    callback: 'callback', // 识别 query 中的 `callback` 参数
    limit: 100, // 函数名最长为 100 个字符
  };

  config.httpclient = {
  // 是否开启本地 DNS 缓存，默认关闭，开启后有两个特性
  // 1. 所有的 DNS 查询都会默认优先使用缓存的，即使 DNS 查询错误也不影响应用
  // 2. 对同一个域名，在 dnsCacheLookupInterval 的间隔内（默认 10s）只会查询一次
  enableDNSCache: false,
  // 对同一个域名进行 DNS 查询的最小间隔时间
  dnsCacheLookupInterval: 10000,
  // DNS 同时缓存的最大域名数量，默认 1000
  dnsCacheMaxLength: 1000,

  request: {
    // 默认 request 超时时间
    timeout: 3000,
  },

  httpAgent: {
    // 默认开启 http KeepAlive 功能
    keepAlive: true,
    // 空闲的 KeepAlive socket 最长可以存活 4 秒
    freeSocketKeepAliveTimeout: 4000,
    // 当 socket 超过 30 秒都没有任何活动，就会被当作超时处理掉
    timeout: 30000,
    // 允许创建的最大 socket 数
    maxSockets: Number.MAX_SAFE_INTEGER,
    // 最大空闲 socket 数
    maxFreeSockets: 256,
  },

  httpsAgent: {
    // 默认开启 https KeepAlive 功能
    keepAlive: true,
    // 空闲的 KeepAlive socket 最长可以存活 4 秒
    freeSocketKeepAliveTimeout: 4000,
    // 当 socket 超过 30 秒都没有任何活动，就会被当作超时处理掉
    timeout: 30000,
    // 允许创建的最大 socket 数
    maxSockets: Number.MAX_SAFE_INTEGER,
    // 最大空闲 socket 数
    maxFreeSockets: 256,
  },
};

// config.proxyagent = {
//   enable: true,
//   package: 'egg-development-proxyagent',
// }

  // robot's configurations
  config.robot = {
    ua: [
      /curl/i,
      /Baiduspider/i
    ]
  };

  config.mongoose = {
    url: process.env.EGG_MONGODB_URL || 'mongodb://127.0.0.1:27017/expressblog',
    options: {
      server: {
        poolSize: 20
      },
    },
  };

  return config;
  
};
